همزمان با رشد سريع اينترنت و خدمات آنلاين، هر روز بر حجم پردازش سرويس دهنده ها و تعداد درخواست هاي كاربران افزوده مي شود. اما حداكثر توان كاري هر سرويس دهنده اندازه اي دارد كه بيشتر از آن نمي تواند به در خواست ها جواب دهد و به صورت معمول سرويس دهي كند. براي خروج از اين وضعيت يك مدير سرويس دهنده، چندين راه حل دارد: جايگزيني سرورهايي با قدرت پردازش بيشتر و يا افزايش تعداد سرويس دهنده هاي موجود. اما اين كار شايد هزينه بسيار زيادي را به سيستم تحميل كند. به طوري كه عملا اجراي آن غيرممكن خواهد بود. در اين شرايط ، شايد برپا سازي يك سرويس دهنده مجازي بر پايه مفاهيم كلاستر و تقسيم سرويس ها ميان چندين سرويس دهنده، يكي از مؤثرترين راهكارهايي باشد كه مي توان براي افزايش قدرت سرويس دهنده به كاربست.كلاستر سازي اين قابليت را فراهم مي كند كه با افزودن يك سرور مجازي به سيستم ، در خواست هاي سرويس ميان چند سرويس دهنده تقسيم شود و از وارد آمدن فشار اضافي بريك سرويس دهنده و نهايتا مختل شدن سرويس دهي شبكه جلوگيري به عمل آيد. در اين نوشتار، به برپاسازي و پيكربندي يك سرور مجازي لينوكس در يك شبكه، كه شامل چندين سرويس دهنده مختلف، مانند سروي دهنده وب، ايميل و FTP است نگاهي مي اندازيم.
مفهوم كلاستر
كلاسترها يكي از جذاب ترين مفاهيمي هستند كه در بحث هاي پردازش موازي و سرويس دهنده مطرح مي شوند. به طور عام ، مفهوم كلاسترها به يك مجموعه از كامپيوترها اطلاق مي شود كه با اشتراك قدرت پردازشي يكديگر، توان بيشتري را براي انجام دادن امور پردازشي محوله فراهم مي كنند. يك كلاستر شامل چندين ماشين است كه در يك شبكه محلي پرسرعت به هم متصل شده و با استفاده از يك برنامه زمانبندي و هماهنگ سازي ميان ماشين هاي شبكه، امور پردازشي را انجام مي دهند.
گونه اي از اين كلاسترها موسوم به load-balancing cluster وظيفه موازنه كردن ترافيك شبكه را ميان ماشين هاي شبكه بر عهده دارند. هدف اين نوشتار نيز پياده سازي چنين كلاستري است كه بتواند با تقسيم كردن درخواست هاي سرويس ارسالي از كاربران يك شبكه ميان چند سرويس دهنده ، از تراكم حجم كاري بر روي يك سرويس دهنده بكاهد.
طرح ريزي كلاستر
كلاستر شامل يك سرور مجازي مبتني بر سيستم عامل لينوكس و تعدادي سرور فيزيكي خواهد بود كه با استفاده از يك سوئيچ ، با هم در ارتباط هستند . هدف شبكه، ارائه سرويس هايي مانند وب و ايميل به كاربران است. كاربران از طريق يك بستر شبكه اي، مانند اينترنت، با سرور مجازي ارتباط دارند. سرورهاي فيزيكي مي توانند بر هر سيستم عاملي مبتني باشند. وظيفه سرور مجازي لينوكس ، بااستفاده از آدرس هاي IP، كاهش فشار حجم درخواست هاي ارسالي به يك سرور فيزيكي و تقسيم درخواست ها ميان چند سرور موجود در شبكه است.
در واقع مي توان گفت كه سرور مجازي ، نقش يك رابط را ميان كاربران شبكه و سرورهاي فيزيكي شبكه ايفا مي كند كه در اين ميان، امكان همزماني پردازش هاي بيشتري از درخواست ها با استفاده از يك آدرس IP فراهم مي شود. هنگامي كه سرور مجازي يك درخواست را از كاربر دريافت مي كند، براساس يك الگوريتم زمانبندي ، درخواست كاربر را به سرور فيزيكي مربوطه تحويل مي دهد. سپس سرور فيزيكي داده هاي مورد تقاضا را براي سرور مجازي به درخواست كاربر جواب خواهد داد. در اين ميان، سرويس دهنده حقيقي همان سرورهاي فيزيكي هستند كه آدرس IP آن ها توسط سرور مجازي تغيير يافته است. سرور مجازي از دو رابط شبكه استفاده مي كند: يك رابط براي برقراري ارتباط با كاربران و دسترسي كاربران به شبكه ، و رابط دوم جهت ارتباط با شبكه محلي و سرورهاي فيزيكي . راه اندازي يك كلاستر با اين ساختار، قابليت هرگونه تغيير، حذف يا افزودن سرورهاي فيزيكي را براي مدير شبكه فراهم مي كند.
بازسازي هسته لينوكس
لينوكس شامل هسته نسخه 2.4.28 و نسخه هاي بالاتر، از كلاسترهاي سرور مجازي يا LVS پشتيباني مي كنند. پس اگر از نسخه هاي پايين تر استفاده مي شود، بايد با اضافه كردن ماجول LVS مجددا هسته را كامپايل و بازسازي كنيد. اين بسته به صورت رايگان از نشاني http://www.linuxvirtualserver.org قابل دريافت است . چون در سايت براي نسخه هاي مختلف هسته، بسته هاي مختلفي ارائه شده ، لازم است شماره بسته متناسب با نسخه هسته لينوكس سيستم بررسي شود. بسته دريافتي از سايت را در شاخه usr/src/ كپي كنيد و دستورات زير را اجرا نماييد:
×#cd/usr/scr/linux
#gunzip ../linux-2.4.21-ipvs-1.0.10.patch.gz
#patch-p1< ../linux-2.4.21-ipvs-1.0.10.patch
دستور خط اول ، موقعيت خط فرمان را به زيرشاخه×linux منتقل مي كند. در خط دوم ، با استفاده از ابزار GUNZIP ، بسته دريافت شده از سايت پروژه از حالت فشرده خارج شده و در خط سوم اين بسته، به هسته اضافه شده است . پس از اضافه شده است. پس از اضافه شدن بسته به هسته، بايد مجددا هسته كامپايل شود. يعني در دايركتوري ×usr/src/linux دستورات زير اجرا شوند:
#make mrproper
#make oldconfig
#make menuconfig
با اجراي دستور آخر، يك منو با چندين زيرشاخه اجرا خواهدشد. براي فعال كردن سرور مجازي از شاخه Networking Options، گزينه IP:Virtual Server Configuration را انتخاب نماييد و آدرس سرور مجازي را تنظيم كنيد:
virtual server support( EXPERIMENTAL)
]Ipvirtual server debugging×[
(16) IPVS connection table size(the Nith power of2)
---IPVS scheduler
round-robin scheduling
< M >weighted round-robin scheduling
< M >least-connection scheduling scheduling
< M >weighted least-connection scheduling
< M >locality-based least-connection scheduling
< M >locality-based least-connection with replication scheduling
< M >destination hashing scheduling
< M >source hashing scheduling
< M >shortest expected delay scheduling
< M >never queue scheduling
---IPVS application helper
FTP protocol helper
قبل از خروج از menuconfig، بايد تغييرات ذخيره شوند. براي ساختن تمامي ماجول هاي جديد كرنل، دستور زير اجرا مي شود:
#make dep&&make bzlmage &&make modules && make modulesinstall
پس از اجراي دستور بالا، زير شاخه جديدي به نام bzlmage در دايركتوري /arch/i386/boot/×usr/src/linux ساخته مي شود و تصوير هسته كامپايل شده در اين شاخه قرار مي گيرد. براي اتمام پيكربندي هسته، بايد اين تصوير در شاخهboot/ كپي شده و فايل هاي پيكربندي بوت لودرهاي سيستم نيز بروز رساني شوند.
نصب ابزار IPT و IPVsadm
در گام بعدي ، پس از بازسازي هسته لينوكس، براي پيكربندي سرور مجازي ، بايد بسته هاي IPTable و IPVsadm نصب شوند. IPTable ابزاري براي راه اندازي ساختار يك فايروال مبتني بر فيلتر بسته هاي IPV4 و NAT در هسته لينوكس است. بااستفاده از اين ابزار، آدرس هاي IPهاي مجازي براي سرورهاي فيزيكي تعريف مي شوند. IPVsadm نيز يك ابزار براي مديريت سرور مجازي لينوكس، تنظيم الگوريتم زمانبندي تقسيم درخواست ها و قوانين ارسال درخواست هاي كاربران به سرورهاي فيزيكي است. بسته نصب IPTable به همراه اكثر توزيع ها ارائه مي شود و مي توان از طريق برنامه مديريت بسته هاي توزيع لينوكس به راحتي آن را نصب كرد. بسته rpm نصب ابزار IPVsadm نيز از سايت پروژه LVS قابل دريافت است. پس از نصب اين دو ابزار، لازم است كه گزينه IP forwarding براي سرور لينوكس فعال شود. براي اين منظور، فايل etc/sysctl.conf/ را در يك ويرايشگر متني بازكرده و گزينه زير را با ارزش 1 مقداردهي كنيد:
net.ipv4.ipforward=1
اكنون كافي است با استفاده از دستور start، سرويس IPTable براي ارسال بسته هاي IP سرورهاي فيزيكي به آدرس كاربران شبكه فعال شود:
#service iptables start
فعال كردن IP masquerading
براي تنظيم آدرس IP سرورهاي فيزيكي در سرور مجازي لينوكس، بايد به اين نكته توجه شود كه eth0 براي كارت شبكه ارتباطي با شبكه اينترنت و eth1 براي كارت شبكه محلي تعريف شوند. در ادامه برروي سرور مجازي، دستورات زير اجرا شوند:
#iptables-t nat-P POSTROUTING DROP
#iptables-t nat-A POSTROUTING-o eth0-j MASQUERDE
در خط اول ، با تعريف يك قانون براي IPTables، يك سطح خارجي امنيتي براي شبكه تعريف مي شود. DROP اين اختيار را به IRTables مي دهد كه هرگونه بسته IP كه از ruleهاي تعريفي تبعيت نمي كند، از شبكه حذف شود و در نتيجه هر آدرس IP جعلي يا ساختگي را نمي توان براي شبكه تنظيم كرد. خط دوم، جدول NAT را براي آدرس دهي شبكه داخلي ميان سرورهاي فيزيكي با سرور مجازي و كارت شبكه eth0 فعال مي كند.
پيكربندي سرور مجازي لينوكس با IPVsadm
در گام بعدي، با استفاده از ابزار IPVsadm سرور مجازي تنظيم مي شود. براي شروع بايد به هريك از ماشين هاي شبكه يك آدرس IP اختصاص داده شود. براي سرورهاي فيزيكي شبكه محلي، يك بازه آدرس دهي مانند 10.0.0.0 تا 255.255.255.0 انتخاب شده و از يك شماره Subnet Musk استفاده مي شود. از سرور مجازي به عنوان دروازه براي سرورهاي فيزيكي استفاده مي شود. ماشين هاي كلاينت با آدرس هاي IP اختصاص يافته توسط سرويس دهنده اينترنت با سرور مجازي در ارتباط خواهند بود. يكي از دو سرور يك سرويس دهنده HTTP است كه براي آن آدرس 10.0.0.2 تعريف مي شود و سرور دوم كه يك سرويس دهنده FTP است، با 10.0.0.3 آدرس دهي مي شود. آدرس 10.0.0.1 به عنوان پيش فرض دروازه براي ارتباط با سرور مجازي انتخاب مي شود و براي ارتباط سرور مجازي انتخاب مي شود و براي ارتباط سرور مجازي با شبكه اينترنت آدرس IP عمومي 61.16.130.100 منظور مي گردد. اكنون با ابزار IPVsadm، آدرس هاي تخصيص داده شده براي سرور مجازي تعريف مي شوند:
#ipvsadm-A-t 161.16130.100:80-s wlc
#ipvsadm-A-161.16.130.100:21-s wrr
در فرامين بالا wlc و wrr دو الگوريتم مديريت ترافيك سرور مجازي براي پورت هاي 80 و 21 هستند. غير از اين دو، الگوريتم هاي زمانبندي قابل تعريف ديگري نيز وجود دارد كه براي آشنايي با آن ها مي توانيد به صفحات man اين برنامه مراجعه كنيد. براي تعريف سرورهاي فيزيكي ، دستورات بالا به صورت زير اجرا مي شوند:
#ipvsadm-a-t 161.16130.100:80-r 10.0.0.3:80-m
#ipvsadm-a-t 161.16.130.100:80-r 10.0.0.2:80-m-w2
#ipvsadm-a-t 161.16.130.100:21-r 10.0.0.3:21-m
البته هميشه ترافيك پورت 80 بيشتر از ترافيك پورت FTP خواهدبود. بدين خاطر آدرس IP شماره 10.0.0.3 براي پورت 80 نيز تعريف شده است. در اين حالت، سرور مجازي با استفاده از الگوريتم هاي زمانبندي خود، مي تواند بار ترافيكي اين پورت را بر روي دو سرور فيزيكي تقسيم كند، با دادن ارزش دو توسط آرگومان m- به آدرس 10.0.02، سرور مجازي خواهد فهميد كه اين پورت بر روي آدرس ديگري نيز تعريف شده است.
نتيجه گيري
براي آزمايش درستي عملكرد شبكه، مي توان با استفاده از ماشين هاي كلاينت، درخواست هايي را براي سرور مجازي فرستاد و نتيجه را مشاهده كرد. اگر به صورت همزمان چندين درخواست را از چند ماشين كلاينت ارسال كنيد، خواهيد ديد برخي درخواست ها به وسيله سرويس دهنده FTP پردازش شده اند و آدرس IP متفاوتي ميان درخواست هاي رسيده برروي ماشين هاي كلاينت وجود دارد. راه اندازي يك سرور مجازي با مشخصات بالا جوابگوي يك كلاستر با تعداد محدودي سرويس دهنده است. براي شبكه هايي كه از تعداد زيادي سرويس دهنده استفاده مي كنند، به راه اندازي چند سرور مجازي، تنظيمات پيشرفته جدول NAT، و سرويس DNS نياز خواهيد داشت.
نظرات شما عزیزان: